<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 
    ！注意写上题目题数
    例如 ：
    1、选择题
        (1)B
        (2)C
        (3)true false false
        (4)B
        (5)C
        
        ...
    2、填空题
        (1)
        获取节点：Node.children Node.firstChildren Node.firstElementChild Node.lastElementChild
        创建节点：createElement createTextNode 
        添加节点：node.append node.appendChild cloneNode
        其他:替换节点: NOde.replaceChild()
             删除节点：Node.remove() node.removeChild


        (2) 1、object.__proto__ === Object.prototype // 为 true
            2、fn.__proto__ === function.prototype // 为 true
                fn.__proto__.__proto__ === Object.prototype // 为 true
        
            3、array.__proto__ === Array.prototype // 为 true
                array.__proto__.__proto__ === Object.prototype // 为 true  

            4、Function.__proto__ === Function.prototype // 为 true
                Array.__proto__ === Function.prototype // 为 true
                Object.__proto__ === Function.prototype // 为 true


            5、true.__proto__ === Boolean.prototype // 为 true


            6、Function.prototype.__proto__ === Object.prototype // 为 true

        3、描述题
        1、ajax 执行异步网络请求，是一种创建动态网页的技术
        2、this本身没有属性 this的原型只有一个属性constructor
        3、event loop 事件循环是js调控同步和异步任务的机制
        4、 原型： 我们创建的每一个函数都有一个原型对象(prototype对象)，这个属性是一个指针，指向的是一个对象。
        这个对象包含了通过构造函数所创建的实例对象共享的属性和方法
           原型链是实例对象(proto)与原型之间的连接


        4、逻辑题
            1.Goodbye Jack
           2.10
           3.
           4.667
           5、Hy Jack
           6、
           7、1 

        5、实操题
        //第一题
        function Person(name,age){ //构造函数person() 有自带的属性name、age
        this.name = name
        this.age = age
        }

        Person.prototype = {  //person 的原型有 species、gender 属性
        species: "Human",
        gender: "man"
        }

        var Person1 = new Person('xx' , '18')

        //ES6
        class Person{
            constructor(id,name){
                this.id=id;
                this.name=name;
            }
        }

        //第二题
        function ajax(_url,_data,_method){
            let method=_method || "GET";

            let data =_data || null;

            return new Promise((resolve,reject)=>{
                let xhr =new XMLHttpRequest();
                if(method.toUpperCase()=="GET"){
                    let str="?";
                    for(let k in data){
                        str +=`${k}=${data[k]}`;
                    };
                str=str.slice(0,-1);
                xhr.open(method,_url+str);
                }else{
                    xhr.open(method,_url);
                }

                xhr.setRequestHeader("Content-Type","application/json");

                xhr.send(JSON.stringify(data));

                xhr.addEventListener("readystatechange",()=>{
                    if(xhr.readyState==4){

                        if(xhr.status==200){
                            resolve(JSON.parse(xhr.responseText))
                        }else{
                            reject(JSON.parse(xhr.responseText));
                        }
                    }
                })
            });
        }


        //第三题
        //方法一
        //...new Set()
         function fn(arr){
            let set=[...new Set(arr )];
            console.log(set);
        }
        fn(arr)

        //方法二

       // filter
        let newArr=  arr.filter((data,index)=>{
            return arr.indexOf(data) === index
        })
        console.log(newArr);
        
        //方法三
        let newArr=[];
        arr.forEach((item,index)=>{
            if(newArr.indexOf(item)===-1){
                newArr.push(item);
            }
        })
        console.log(newArr);

        //方法四
        let newArr=[];
        arr.forEach((item,index)=>{
            if(!newArr.includes(item)){
                newArr.push(item)
            }
        })
        console.log(newArr);



        
        ...

    -->
</body>


</html>